// 只会在 Web 编译时被引入
// ignore_for_file: avoid_web_libraries_in_flutter
import 'dart:html' as html;
import 'dart:js_util' as js_util;

import 'picked_directory.dart';

/// Web 平台下的目录选择实现。
///
/// 基于浏览器的 **File System Access API**：
/// [window.showDirectoryPicker](https://developer.mozilla.org/docs/Web/API/window/showDirectoryPicker)
///
/// - 成功时返回 [PickedDirectory]；
/// - 由于 Web 无法提供真实的本地路径，因此仅返回一个可读字符串作为 `displayPath`；
/// - 将浏览器返回的 `FileSystemDirectoryHandle` 原样存放在 [PickedDirectory.webHandle]，
///   供后续读写文件时使用；
/// - 用户取消、权限拒绝或浏览器不支持时，返回 `null`。
Future<PickedDirectory?> pickDirectoryImpl() async {
  try {
    // 调用原生 JS API：window.showDirectoryPicker()
    final handle = await js_util.promiseToFuture(
      js_util.callMethod(html.window, 'showDirectoryPicker', const []),
    );

    // 获取目录名（可能为 null）
    final String? name = js_util.getProperty(handle, 'name');

    // Web 无真实路径 → 拼接一个可读字符串，例如 fs://Documents
    final display =
    name == null || name.isEmpty ? 'fs://(directory)' : 'fs://$name';

    return PickedDirectory(
      displayPath: display,
      webHandle: handle, // 保存 JS 句柄以便后续使用
    );
  } catch (e) {
    // 用户取消、权限被拒绝或 API 不可用时，直接返回 null
    return null;
  }
}
